package com.ijustyce.kotlin.basic.syntax

import java.util.*

/**
 * Created by yc on 2015/11/28 0028.
 *
 * 官方文档学习：http://kotlinlang.org/docs/reference/basic-syntax.html
 * basic syntax 中文的意思是基本语法，今天的学习就是基本语法了
 *
 */

/**
 * 首先是包名，这里我写的是：com.ijustyce.kotlin.basic.syntax，然而，没必要想java那样，必须要
 * 有com文件夹，然后下面有ijustyce文件夹，再有kotlin文件夹，这里，你可以是随意的，官方是这样说的
 * It is not required to match directories and packages: source files can be placed
 * arbitrarily（随意的，随心所欲的） in the file system.
 */

/**
 * main方法，Java程序员都懂的，在IntelliJ IDEA里，输入p，选择psvm即可（模板）
 */
fun main(args: Array<String>) {

    // 可变的对象，变量，这么定义，赶脚kotlin里没有int、只有对象
    var age = 10  //  没有指明类型
    var age1 : Int = 10  //  指明了类型

    //  不可变的对象，常量
    val name = "ijustyce"

    //  Array及其遍历
    var array = Array (3, { i -> "" })
    array.set(0, "I")
    array.set(1, "Love")
    array.set(2, "You")

    for(string in array){

        println(string)
    }

    //  list及其遍历
    var list : ArrayList<String> = ArrayList()
    list.add("I")
    list.add("Love")
    list.add("You")

    for(string in list){
        println(string)
    }

    //  你还可以这样，判断是否包含，支持array和list
    if("You" in list) println("exists")

    //  也可以这样，在一个范围内遍历或者查找
    var a =9
    for(tmp in 1 ..a) println("tmp is ${tmp}") //  这个输出也很特别，不是吗？
    if(7 in 1..a) println("true")

    println("max is ${max(10, 5)}")

    case(1)
    case(2)
    case(3)
    case(5)
    case(11)
}

//  不支持？表达式，即这里不能写成：fun max(a : Int, b : Int) = a > b ? a : b
fun max(a : Int, b : Int) = if (a > b) a else b

//  这里可以省略 :Unit 它表示返回类型
fun case(a : Int) : Unit {

    when(a){

        1 -> println("what your input is 1")
        2,3 -> println("what your input is 2 or 3")
        !in 4..10 -> println("not in 4-10")
        else -> println("I don't know what your input")
    }
}




